package org.pray.reversedep;

/**
 * InterfaceIsolate 接口隔离原则,接口的定义需要细致，不能把没用的东西通过继承反而变成冗余状态了
 *
 * @author 春江花朝秋月夜
 * @since 2024/2/12
 */

// 接口隔离原则，要求接口设计的粒度必须明确，例如设备就有电子设备和机器设备，如果只规定设备接口显然粒度太细，实现继承需要实现很多自己不需要的接口
public interface InterfaceIsolate {

    interface SmartDevice { // 智能设备才有getCpu和getMemory
        String getCpu();

        String getType();

        String getMemory();
    }

    interface NormalDevice { // 普通设备只有getType
        String getType();
    }

    // 电脑就是一种电子设备，那么我们就继承此接口
    class Computer implements SmartDevice {

        @Override
        public String getCpu() {
            return "i9-12900K";
        }

        @Override
        public String getType() {
            return "电脑";
        }

        @Override
        public String getMemory() {
            return "32G DDR5";
        }
    }

    // 电风扇也算是一种电子设备
    class Fan implements NormalDevice {
        @Override
        public String getType() {
            return "风扇";
        }
    }

    // 将接口进行了细粒度的划分，不同类型的电子设备就可以根据划分去实现不同的接口了。当然，也不能划分得太小，还是要根据实际情况来进行决定。
}
